package model

import (
	"time"
)

// Instance 定义实例表的模型
type Instance struct {
	ID              int64     `gorm:"primaryKey;autoIncrement;comment:自增ID" json:"id"`
	Hostname        string    `gorm:"type:varchar(128);not null;comment:主机名" json:"hostname"`
	IP              string    `gorm:"type:varchar(64);not null;comment:IP" json:"ip"`
	Port            int       `gorm:"not null;comment:端口" json:"port"`
	Role            string    `gorm:"type:varchar(12);not null;comment:实例角色 master | slave" json:"role"`
	DBType          string    `gorm:"type:varchar(12);not null;comment:数据库类型名称 MySQL | PostgreSQL" json:"db_type"`
	ClusterID       *int      `gorm:"not null;comment:集群ID" json:"cluster_id"`
	Cluster         *Cluster  `gorm:"foreignKey:ClusterID" json:"cluster"`
	ShardNum        *int      `gorm:"not null;comment:所属分片号 0、1、2..." json:"shard_num"`
	DBVersion       string    `gorm:"type:varchar(12);not null;comment:数据库版本" json:"db_version"`
	DBVersionDetail string    `gorm:"type:varchar(64);not null;comment:数据库版本详情" json:"db_version_detail"`
	ServerID        int       `gorm:"not null;comment:server表ID" json:"server_id"`
	Server          *Server   `gorm:"foreignKey:ServerId" json:"server"`
	DeployType      string    `gorm:"type:varchar(32);not null;comment:部署类型： RDS | ECS | IDC" json:"deploy_type"`
	Env             string    `gorm:"type:varchar(12);not null;comment:环境 DEV | PRO" json:"env"`
	CPU             int       `gorm:"not null;comment:实例的cpu" json:"cpu"`
	RAM             int       `gorm:"not null;comment:实例的ram" json:"ram"`
	Disk            int       `gorm:"not null;comment:实例的disk" json:"disk"`
	Status          string    `gorm:"type:varchar(12);not null;default:online;comment:状态，online/offline/discard" json:"status"`
	Remark          string    `gorm:"type:varchar(255);comment:备注/标签" json:"remark"`
	CreateTime      time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime      time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
	IsDelete        bool      `gorm:"type:boolean;default:false;comment:逻辑删除标记，FALSE表示未删除，TRUE表示已删除" json:"is_delete"`
}

// TableName 指定表名
func (Instance) TableName() string {
	return "instance"
}

type InstanceListRequest struct {
	Hostname    string `form:"hostname" json:"hostname"`
	IP          string `form:"ip" json:"ip"`
	Role        string `form:"role" json:"role"`
	DBType      string `form:"db_type" json:"db_type"`
	ClusterID   *int   `form:"cluster_id" json:"cluster_id"`
	ShardNum    *int   `form:"shard_num" json:"shard_num"`
	DBVersion   string `form:"db_version" json:"db_version"`
	DeployType  string `form:"deploy_type" json:"deploy_type"`
	Env         string `form:"env" json:"env"`
	Status      string `form:"status" json:"status"`
	Search      string `json:"search"`
	Page        int64  `form:"page" json:"page" default:"1"`
	PageSize    int64  `form:"page_size" json:"page_size" default:"10"`
	ShowCluster bool   `form:"show_cluster" json:"show_cluster"`
	ShowServer  bool   `form:"show_server" json:"show_server"`
}

type InstanceListResponse struct {
	Count    uint64      `json:"count"`
	Records  []*Instance `json:"records"`
	Page     int64       `json:"page"`
	PageSize int64       `json:"page_size"`
}
